package com.awei.project.service;


import com.awei.project.model.dto.userRequest.UserQueryRequest;
import com.awei.project.model.dto.userRequest.UserRegisterRequest;
import com.awei.project.model.vo.UserVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.awei.project.model.entity.User;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 用户服务
 *
 * @author 小维哥
 * @version 1.2
 */
public interface UserService extends IService<User> {

        /**
         * 用户注册
         *
         * @param userAccount   用户账户
         * @param userPassword  用户密码
         * @param checkPassword 校验密码
         * @return 新用户 id
         */
        long userRegister(UserRegisterRequest userRegisterRequest);

        /**
         * 用户登录
         *
         * @param userAccount  用户账户
         * @param userPassword 用户密码
         * @param request
         * @return 脱敏后的用户信息
         */
        User userLogin(String userAccount, String userPassword, HttpServletRequest request);

        /**
         * 获取当前登录用户
         *
         * @param request
         * @return
         */
        User getLoginUser(HttpServletRequest request);

        /**
         * 是否为管理员
         *
         * @param request
         * @return
         */
        boolean isAdmin(HttpServletRequest request);

        boolean isAdmin(User user);

        Integer updateUserById(User user, User loginUser);

        /**
         * 用户注销
         *
         * @param request
         * @return
         */
        boolean userLogout(HttpServletRequest request);

        /**
         * 用户脱敏
         *
         * @param originUser
         * @return
         */
        User getSafetyUser(User originUser);

        UserVO getUserVo(User originUser);

        /**
         * 分页查询
         *
         * @return
         */
        Page<UserVO> listUserByPage(UserQueryRequest userQueryRequest, long size, long current);

        /**
         * 根据标签进行查询
         *
         * @param tageNames
         * @return
         */
        List<User> searcherUserByTags(List<String> tageNames,int size,int current);

        /**
         *  脱敏
         * @param userPage 原始参数
         * @return 安全参数
         */
        Page<UserVO> getSafePageUser(Page<User> userPage);


        /**
         * 获取更准确的用户
         * @param num
         * @param user
         * @return
         */
        List<User> matchUsers(long num, User user);

        /**
         * 更新用户标签
         * @param userId
         * @param loginUser
         * @param tags
         * @return
         */
        int updateTags(Long userId, User loginUser, List<String> tags);

        /**
         * 修改用户的头像
         * @param file         头像文件
         * @param loginUser  要修改的用户
         * @return
         */
        boolean updateUserImg(MultipartFile file, User loginUser);
}
